#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <ctype.h>
#include "ejecucion.h"
void explicacion(char *argv[]);
int is_integer(char *string);

int main(int argc, char **argv){
	char *parametroL1 = '\0';
	char *parametroL2 = '\0';

	int opcion;


	int lflag = 0;
	int sflag = 0;


  opterr = 0;
/*	
	
 printf ("\n--[Argumentos recibidos]--------------------------------\n");
  for (i = 0; i < argc; i++) {
    printf ("\targumento %d = %s\n", i, argv[i]);
  }
    printf ("--------------------------------------------------------\n");
	
*/


	if (argc>1){
		/* si hay parametros los analiza */

		  
		
while ((opcion = getopt (argc, argv, "sl:")) != -1)
{
    switch (opcion)
      {

      case 's':
        sflag = 1;
        break;


      case 'l':
	lflag = 1;
        parametroL1 = optarg;
        break;

        /* en caso de error getopt devuelve el caracter ?*/
      case '?':
        		explicacion (argv);
		return 1;

        /* en cualquier otro caso lo consideramos error grave y salimos*/
      default:
        explicacion(argv);

	return 0;

      }  /* case*/

	}/* while*/

	
	/*** hete aqui el truco para un segundo parametro a -l, que getopt no  lo ha reconocido 
	getopt reordena los parametros y deja al final los no reconocidos (como opcion o como parametro de opcion). 
	entonces un valor pasa como parametro y el otro queda en optind ! lluvia de chanes. 
	*/
	
	parametroL2 = argv[optind];
	
	/*** luego comentar esta linea que es simplemente para mostrar que parametros y valores recibe **/
	printf ("opcionS = %d, parametroL1 = %s, parametroL2 = %s\n",sflag, parametroL1, parametroL2);		
		
	}


	
	if(lflag==1) {

		/* Verificamos si parametros L1 y L2 son numericos ! */
	
				/* tambien habria que verificar que L2 > L1, cierto? */ 
		
		if(is_integer(parametroL1) && is_integer(parametroL2)) {			
			por_defecto(sflag,lflag,atoi(parametroL1),atoi(parametroL2));				
		}else{
			printf("### PROBLEMAS EN LOS PARAMETROS intervalo y duracion ");
			explicacion(argv);
			return 1;
		}
		
		
	}else{

	if(parametroL2!='\0'){
		explicacion(argv);
		}else{
		por_defecto(sflag,lflag,0,0);
		}
	}
	
	return 0;
	
}

void explicacion (char *argv[]) {
        printf ("Alguna opcion o parametro es incorrecto\n");
        printf("Los usos correctos son: \n");
	printf(" * Modo simple: ./ksamp \n");
	printf(" * Modo extendido: ./ksamp -s \n");
	printf(" * Modo analisis: ./ksamp -l intervalo duracion \n");

}



int is_integer(char *string)
{
  if (isdigit(string[0]) || string[0] == '-' || string[0] == '+') {
    while (*++string && isdigit(*string))
      ;                                           /* deliberadamente vacio */
    if (!*string)
      return 1;
  }
  return 0;
}
